package com.example.androidcoursedesign.login;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;


import com.example.androidcoursedesign.MainActivityExample;
import com.example.androidcoursedesign.R;
import com.example.androidcoursedesign.login.utils.Utils;
import com.example.androidcoursedesign.main.MainActivity;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.Map;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class LoginAct extends AppCompatActivity implements View.OnClickListener {
    private EditText input_username;
    private EditText input_password;
    private Button login_bt;
    private TextView register_tv;
    private OkHttpClient client ;



    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        getSupportActionBar().hide();
        input_username = (EditText) findViewById(R.id.et_loginactivity_username);
        input_password = (EditText) findViewById(R.id.et_loginactivity_password);
        login_bt = findViewById(R.id.bt_loginactivity_login);
        register_tv=findViewById(R.id.tv_loginactivity_register);
        //登录
        login_bt.setOnClickListener(this);
        //注册
        register_tv.setOnClickListener(this);
        //初始化okhttpclient
        client = new OkHttpClient();

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_loginactivity_login:
                login();
                break;
            case  R.id.tv_loginactivity_register:
                register();
                break;
        }

    }


    private void login() {
        //输入的inputData内容，有可能是手机号、用户名或邮箱
        String inputData = input_username.getText().toString();
        String password = input_password.getText().toString();
        UserBean userBean = new UserBean();
        if (Utils.checkEmail(inputData)){//用户名位置输入的是邮件地址
            userBean.setEmail(inputData);
        }else if (Utils.isMobile(inputData)){//用户名位置输入的是手机号
            userBean.setPhone(inputData);
        }else {
            userBean.setUsername(inputData);
        }

        userBean.setPassword(password);
        //userBean对象转为json数据便于与后台数据交互
        Gson gson = new Gson();
        //userBean对象转json
        String userInfoJson = gson.toJson(userBean);
        //构造 RequestBody 需要指定MediaType，用于描述请求/响应 body 的内容类型
        MediaType mediaType = MediaType.parse("application/json;charset=utf-8");
        //请求的登录接口url
        String url="http://10.111.34.2:8085/userLogin";

        //创建请求
        Request loginRequest = new Request.Builder()
                .post(RequestBody.create(userInfoJson, mediaType))
                .url(url)
                .build();

        //发起请求
        client.newCall(loginRequest).enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                String responseData = response.body().string();
                //由后端返回的json数据responseData转成一个实体对象，这里使用Map作为实体的例子
                Map data = gson.fromJson(responseData, Map.class);
                String code = (String) data.get("code");
                String msg = (String) data.get("msg");
                if ("00".equals(code)){//成功
                    //成功就有登录界面跳转到主界面
                    Intent intent = new Intent(LoginAct.this, MainActivity.class);
                    startActivity(intent);
                    //关闭登录界面
                    LoginAct.this.finish();
                }else {
                     //Toast提示,因为Toast的提示是主线程执行，而此时是异步请求方式即这个方法还在子线程不能直接更新UI线程，需要做如下处理：
                        // 在主线程(UI)执行显示逻辑,即如下
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(LoginAct.this, msg, Toast.LENGTH_SHORT).show();
                        }
                    });


                }


            }
        });


    }


    private void register() {
       Intent intent = new Intent(LoginAct.this,RegisterAct.class);
       startActivity(intent);

    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);

    }
}
